package ar.com.temporis.util.collection;

import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * Factory de collecciones. Usamos esto para tener en un solo lugar la manera de
 * instanciar colecciones y de esa forma poder cambiar en un solo lugar el tipo
 * de collecciones que se usan en el sistema.
 * 
 * @author matias.sulik
 * 
 */
public class CollectionFactory {

	public static <T> Collection<T> createCollection() {
		return createList();
	}
	
    public static <T> List<T> createList() {
        return new LinkedList<T>();
    }

	public static <T> ListBuilder<T> createListBuilder() {
		return new ListBuilder<T>();
	}

	public static <K, V> Map<K, V> createMap() {
		return new HashMap<K, V>();
	}

	public static <T> List<T> createList(Object[] objects) {
		List<T> answer = createList();
		
		for (int i = 0; i < objects.length; i++) {
			Object object = objects[i];
			answer.add((T) object);
		}
		
		return answer;
	}

}
